#!/usr/bin/env python
# -*- coding: utf-8 -*-
import threading
import tkinter as tk  # 使用Tkinter前需要先导入
import tkinter.messagebox
import pickle

# 第1步，实例化object，建立窗口window
from Interview import *;

window = tk.Tk()
interview = Interview()
# 第2步，给窗口的可视化起名字
window.title('欢迎来到模拟面试')

# 第3步，设定窗口的大小(长 * 宽)
window.geometry('400x400')  # 这里的乘是小x


# # 第5步，用户信息
# tk.Label(window, text='User name:', font=('Arial', 14)).place(x=10, y=170)
# tk.Label(window, text='Password:', font=('Arial', 14)).place(x=10, y=210)


def thread_it(func, *args):
    '''将函数打包进线程'''
    # 创建
    t = threading.Thread(target=func, args=args)
    # 守护 !!!
    t.setDaemon(True)
    # 启动
    t.start()
    # 阻塞--卡死界面！
    # t.join()


# 第9步，定义录制界面窗口
def usr_sign_up():
    # 定义长在窗口上的窗口
    window_sign_up = tk.Toplevel(window)
    window_sign_up.geometry('600x500')
    window_sign_up.title('录制问题窗口')

    new_name = tk.StringVar()  # 将输入的注册名赋值给变量
    new_name.set('ioc')  # 将最初显示定为'example@python.com'
    tk.Label(window_sign_up, text='问题标题: ').pack()  # 将`User name:`放置在坐标（10,10）。
    entry_new_name = tk.Entry(window_sign_up, width=60, textvariable=new_name)  # 创建一个注册名的`entry`，变量为`new_name`
    entry_new_name.pack()  # `entry`放置在坐标（150,10）.

    # 第5步，在窗口界面设置放置Button按键
    b1 = tk.Button(window_sign_up, text='开始录制', font=('Arial', 12), width=10, height=1,
                   command=lambda: thread_it(interview.question_rec, f'{new_name.get()}.wav', window_sign_up))
    b1.pack(pady=10)

    # 第5步，在窗口界面设置放置Button按键
    b = tk.Button(window_sign_up, text='结束录制', font=('Arial', 12), width=10, height=1,
                  command=lambda: thread_it(interview.update_question_label, False))
    b.pack()


# 定义查看界面窗口
def usr_get():
    # 负责读取序列化数据
    try:
        res = interview.read_result()
    except:
        tkinter.messagebox.showinfo(title='Hi', message='当前没有任何问题列表,请添加问题后再查看结果')
        return;
    if len(res) == 0:
        tkinter.messagebox.showinfo(title='查看结果', message='当前沒有問答信息,請添加后再繼續查看！')
        return;
    # 定义长在窗口上的窗口
    window_sign_up = tk.Toplevel(window)
    window_sign_up.geometry('600x500')
    window_sign_up.title('查看结果窗口')
    lb = tk.Listbox(window_sign_up, listvariable=interview.qus_list)
    # 清除掉原来的数据
    lb.delete(0, lb.size())
    for item in interview.qus_list:
        lb.insert('end', item)
    lb.pack(pady=10)
    btn_sign_up = tk.Button(window_sign_up, text='       查看当前问答结果         ', font=('宋体', 12),
                            command=lambda: thread_it(interview.play_qus_answer_audio, lb.get(lb.curselection())))
    btn_sign_up.pack(pady=10)

    btn_sign_up = tk.Button(window_sign_up, text='       删除当前问答结果         ', font=('宋体', 12),
                            command=lambda: thread_it(interview.del_qus_ans_audio, lb.get(lb.curselection()),lb))
    btn_sign_up.pack(pady=10)


# 第1步,主界面按钮
btn_login = tk.Button(window, text='开始面试', font=('宋体', 10),
                      command=lambda: thread_it(interview.hand_start))
btn_login.pack(pady=10)
btn_login = tk.Button(window, text='查看结果', font=('宋体', 10), command=usr_get)
btn_login.pack(pady=10)
btn_sign_up = tk.Button(window, text='录制问题', font=('宋体', 10), command=usr_sign_up)
btn_sign_up.pack(pady=10)
btn_sign_up = tk.Button(window, text='结束整场面试', font=('宋体', 10),
                        command=lambda: thread_it(interview.update_exit_label, False))
btn_sign_up.pack(pady=10)
btn_sign_up = tk.Button(window, text='       下一题         ', font=('宋体', 12),
                        command=lambda: thread_it(interview.update_answer_label, False))
btn_sign_up.pack(pady=10)

# 第10步，主窗口循环显示
window.mainloop()
